Image Classification হল একটি কম্পিউটার ভিশন টাস্ক যেখানে মডেলটি একটি ছবি ইনপুট হিসেবে নিয়ে তার শ্রেণি (label) সনাক্ত করে। এই টাস্কটি সাধারণত Convolutional Neural Networks (CNNs) ব্যবহার করে করা হয়, কারণ CNNs ইমেজ ডেটার স্থানীয় বৈশিষ্ট্য যেমন আ edges, textures, এবং প্যাটার্নগুলো শিখতে সক্ষম।
নিচে, Image Classification মডেল তৈরি করার জন্য একটি স্টেপ-বাই-স্টেপ প্রক্রিয়া দেয়া হলো, যেখানে Keras এবং TensorFlow লাইব্রেরি ব্যবহার করা হবে।
প্রয়োজনীয় লাইব্রেরি ইনস্টল করা:
pip install tensorflow numpy matplotlib
1. ডেটাসেট প্রস্তুতি:
প্রথমে, একটি ইমেজ ক্লাসিফিকেশন ডেটাসেট ব্যবহার করতে হবে। এখানে আমরা CIFAR-10 ডেটাসেট ব্যবহার করব, যা একটি জনপ্রিয় ডেটাসেট যা ১০টি শ্রেণী (classes) নিয়ে গঠিত এবং প্রতিটি শ্রেণীতে ৬,০০০ ইমেজ থাকে। TensorFlow থেকে এটি সহজেই লোড করা যায়।
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# CIFAR-10 ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# ডেটাকে স্কেল করা [0,1] রেঞ্জে
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# লেবেলগুলি One-hot Encoding এ কনভার্ট করা
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
2. CNN মডেল তৈরি:
এখন একটি Convolutional Neural Network (CNN) তৈরি করা হবে। CNN-এ সাধারণত Conv2D লেয়ার, MaxPooling2D লেয়ার, এবং Dense লেয়ার থাকে।
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
# মডেল তৈরি করা
model = Sequential()
# প্রথম কনভলিউশনাল লেয়ার
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(MaxPooling2D((2, 2)))
# দ্বিতীয় কনভলিউশনাল লেয়ার
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
# তৃতীয় কনভলিউশনাল লেয়ার
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
# Flatten লেয়ার
model.add(Flatten())
# Fully Connected লেয়ার
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # Overfitting প্রতিরোধের জন্য Dropout
# আউটপুট লেয়ার (Softmax Activation)
model.add(Dense(10, activation='softmax')) # 10 ক্লাসের জন্য 10 ইউনিট
# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
3. মডেল প্রশিক্ষণ (Training the model):
এখন আমরা তৈরি করা CNN মডেলটি প্রশিক্ষণ দেব। এর জন্য আমরা x_train এবং y_train ডেটা ব্যবহার করব এবং মডেলটি প্রশিক্ষণ চলাকালে x_test এবং y_test দিয়ে মূল্যায়ন করব।
# মডেল প্রশিক্ষণ
history = model.fit(x_train, y_train, epochs=10, batch_size=64, validation_data=(x_test, y_test))
4. মডেল মূল্যায়ন (Evaluating the model):
মডেল প্রশিক্ষণের পর, আমরা test dataset ব্যবহার করে মডেলের সঠিকতা যাচাই করব।
# মডেল মূল্যায়ন
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test Accuracy: {test_acc * 100:.2f}%')
5. মডেল পূর্বাভাস (Prediction):
এখন মডেলটি নতুন ইমেজের জন্য পূর্বাভাস দিতে প্রস্তুত। আপনি একটি নতুন ইমেজ পাস করে, মডেল থেকে শ্রেণী (class) পেতে পারেন।
import numpy as np
import matplotlib.pyplot as plt
# প্রথম ইমেজের পূর্বাভাস
predictions = model.predict(x_test)
predicted_class = np.argmax(predictions[0])
# আসল ক্লাস এবং পূর্বাভাস প্রদর্শন
print(f'Predicted Class: {predicted_class}, True Class: {np.argmax(y_test[0])}')
# ছবিটি প্রদর্শন করা
plt.imshow(x_test[0])
plt.show()
6. মডেল সংরক্ষণ (Save the model):
মডেলটি প্রশিক্ষিত হলে, আপনি এটি সংরক্ষণ করতে পারেন যাতে ভবিষ্যতে ব্যবহার করা যায়।
# মডেল সংরক্ষণ
model.save('image_classification_model.h5')
সারাংশ:
- Image Classification মডেল তৈরি করতে Convolutional Neural Networks (CNNs) ব্যবহৃত হয়। এই মডেলটি একটি ছবি ইনপুট হিসেবে নিয়ে তার শ্রেণি চিহ্নিত করতে শিখে।
- মডেলটি CIFAR-10 ডেটাসেট ব্যবহার করে প্রশিক্ষিত হয়, এবং CNN আর্কিটেকচারটি Conv2D, MaxPooling2D, Flatten, এবং Dense লেয়ারগুলি নিয়ে তৈরি করা হয়।
- প্রশিক্ষণের পরে, মডেলটি পরবর্তী নতুন ইমেজের শ্রেণি (label) সনাক্ত করতে ব্যবহৃত হতে পারে।
- Flask বা Django দিয়ে এই মডেলটি ডেপ্লয় করতে পারবেন, যাতে ব্যবহারকারীরা ইন্টারফেসের মাধ্যমে ইমেজ ইনপুট দিতে পারেন এবং মডেল থেকে পূর্বাভাস পেতে পারেন।
Read more